home *** CD-ROM | disk | FTP | other *** search
- #ifndef lint
- static char rcsid[] = "$Header: makemove.c,v 1.1 87/02/12 11:03:53 schoch Exp $";
- #endif
-
- #include "externs.h"
-
- makemove (from, to, color)
- int from, to, color;
- {
- int victim;
- LIST l, lmember ();
- MOVELIST newmove;
- static MOVELIST lastmove;
- char *malloc ();
-
- newmove = (MOVELIST) malloc (sizeof (struct MOVE));
- newmove -> from = from;
- newmove -> to = to;
- newmove -> n = NULL;
- if (!movelist)
- movelist = newmove;
- else
- lastmove -> n = newmove;
- lastmove = newmove;
- victim = findvictim (from, to);
- if (victim) {
- if (option [ANNOUNCETAKES] || whose [victim] == ourcolor) {
- char buf[128], *str;
-
- if (occupant [victim] == PAWN)
- str = "pawn";
- else
- str = "piece";
- if (reverse)
- sprintf(buf, "%s captured: %1c%1d\r",
- str, (9 - victim % 10) + 'a' - 1,
- victim / 10);
- else
- sprintf(buf, "%s captured: %1c%1d\r",
- str, victim % 10 + 'a' - 1,
- 9 - victim / 10);
- message(buf, CAPTURE);
- }
- if (whose[victim] == ourcolor) {
- redraw_pos(victim);
- display_capture(whose[victim], occupant[victim]);
- }
- virgin [victim] = FALSE;
- whose [victim] = EMPTY;
- lfront (lmember (victim, piecelocs [1 - color]),
- piecelocs [1 - color]);
- piecelocs [1 - color] = (piecelocs [1 - color])->n;
- }
- l = lmember (from, piecelocs [color]);
- l->i = to;
- if (occupant [from] == KING)
- kingloc [color] = to;
- virgin [from] = FALSE;
- whose [to] = color;
- occupant [to] = occupant [from];
- whose [from] = EMPTY;
- occupant [from] = 0;
- if (occupant [to] == PAWN
- && ((to / 10 == 1 && color == WHITE)
- || (to / 10 == 8 && color == BLACK))) {
- if (option [ANNOUNCETAKES])
- message("pawn promoted\n", MESSAGE);
- occupant [to] = QUEEN;
- }
- if (whose [to] == ourcolor) {
- redraw_pos(from);
- redraw_piece(to);
- }
- }
-